package com.ruoyi.business.alarm.service;

import java.util.List;
import com.ruoyi.business.alarm.domain.DoorAlarmLog;

/**
 * 门报警日志Service接口
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
public interface IDoorAlarmLogService 
{
    /**
     * 查询门报警日志
     * 
     * @param alarmId 门报警日志主键
     * @return 门报警日志
     */
    public DoorAlarmLog selectDoorAlarmLogByAlarmId(Long alarmId);

    /**
     * 查询门报警日志列表
     * 
     * @param doorAlarmLog 门报警日志
     * @return 门报警日志集合
     */
    public List<DoorAlarmLog> selectDoorAlarmLogList(DoorAlarmLog doorAlarmLog);

    /**
     * 新增门报警日志
     * 
     * @param doorAlarmLog 门报警日志
     * @return 结果
     */
    public int insertDoorAlarmLog(DoorAlarmLog doorAlarmLog);

    /**
     * 修改门报警日志
     * 
     * @param doorAlarmLog 门报警日志
     * @return 结果
     */
    public int updateDoorAlarmLog(DoorAlarmLog doorAlarmLog);

    /**
     * 批量删除门报警日志
     * 
     * @param alarmIds 需要删除的门报警日志主键集合
     * @return 结果
     */
    public int deleteDoorAlarmLogByAlarmIds(Long[] alarmIds);

    /**
     * 删除门报警日志信息
     * 
     * @param alarmId 门报警日志主键
     * @return 结果
     */
    public int deleteDoorAlarmLogByAlarmId(Long alarmId);

    /**
     * 处理门状态变化，记录报警日志
     * 
     * @param slotNumber 槽号
     * @param alarmType 报警类型（1=电源箱门开，2=槽控机门开）
     * @param isOpen 门是否打开
     * @param doorInfo 门状态信息（用于更新Redis）
     */
    public void handleDoorStatusChange(Integer slotNumber, String alarmType, Boolean isOpen, com.ruoyi.business.alarm.domain.DoorStatusInfo doorInfo);
    
    /**
     * 异步保存报警记录到数据库
     * 
     * @param alarmLog 报警记录
     * @param redisKey Redis键
     * @param doorInfo 门状态信息
     * @param slotNumber 槽号
     * @param alarmType 报警类型
     */
    public void saveAlarmLogAsync(com.ruoyi.business.alarm.domain.DoorAlarmLog alarmLog, String redisKey, com.ruoyi.business.alarm.domain.DoorStatusInfo doorInfo, 
                                   Integer slotNumber, String alarmType);
    
    /**
     * 异步更新报警记录到数据库
     * 
     * @param alarmId 报警ID
     * @param slotNumber 槽号
     * @param alarmType 报警类型
     */
    public void updateAlarmLogAsync(Long alarmId, Integer slotNumber, String alarmType);
    
    /**
     * 异步修复报警记录（从数据库查询并更新）
     * 
     * @param slotNumber 槽号
     * @param alarmType 报警类型
     */
    public void repairAlarmLogAsync(Integer slotNumber, String alarmType);
}

